欢乐赛#41全题解
T1:
题目分析
本题要求输入一个浮点数,输出它的整数部分
解题思路
由于c++的int类型有自动向下取整的功能,我们可以将输入数据存入一个int变量中,再输出即可
AC代码:
T2:
题目分析
本题要求输入三个整数,输出其中最大值-最小值的结果
解题思路
直接使用 max 和 min 函数取最大和最小值即可,需要注意c++的 max 与 min 函数只能取两个数的最大值,所以需要使用两个max 和两个 min才能取到最大与最小值
AC代码:
T3:
题目分析
本题要求输出一个矩阵中m的倍数的个数
解题思路
两层暴力for循环即可解决,肥肠简单
AC代码
T4:
题目分析
本题要求对一个长度为n的数组a进行m次冒泡(排序)后输出
解题思路
我怕在座的各位还有人没学过冒泡排序,所以讲一下冒泡排序的规则。
冒泡排序的原理就是每次比较相邻元素,如果大的在前面,就用swap函数交换(你去搞个tmp也可以)具体动图看这里 冒泡排序动图
AC代码
T5:
个人认为这是此次欢乐赛最难的题,谁能告诉我为什么这么多人错T6?
题目分析
本题有t组测试数据,每组给了我们两个整数 a 和 b ,a只能*2 或 +1,每让a *2或+1都算作一次操作,问让a=b至少需要几次操作
解题思路
这道题有一点很重要就是逆向思考更好,把a让 *2或+1 变成让b /2或-1,因为逆着更容易判断终点
我这里只讲逆向思维。
因为我们要大数变小数,而+1反而变大了,这样看最优解就是一直除以二了,但你会发现一个问题:如果b无法整除二了,那该怎么办呢?就只能+1了,因为奇数+1一定是偶数,所以当除不尽时就得+1。
所以我们代码的思路就是如果b<=a就一直加,否则如果b能整除二就除以二,没法整除二就+1即可
AC代码
T6:
题目分析
本题给了我们t组测试数据,每组有a和b两个数,代表有a个菜鸟和b个高手,其中两个高手和一个菜鸟或两个菜鸟和一个高手可组成一队,问最多能组成多少队
解题思路
如果高手比菜鸟多,最优解显然是采用两个高手配一个菜鸟的方案;如果菜鸟比高手多,最优解就是采用两个菜鸟配一个高手的方案,如果相同的话就随意了。我们可以用一个while循环来实现这个思路,如果无法再组队的话,就得退出while循环了。
AC代码
蒟蒻第一次发欢乐赛题解,点个赞吧球球了